Search Results: "sax"

4 October 2007

Michael Koch: Funny code

Today I worked on packaging Saxon 8 for Debian. While looking at some of its code I saw the following:

if (System.getProperty("java.vendor").equals("Jeroen Frijters"))
platform = DotNetPlatform.getInstance();

Note: Jeroen Frijters is the author of IKVM.

9 August 2007

Alexander Schmehl: No smoking area

Today is the 9th of August and we've been at a restaurant (well... a self service cafeteria). Nothing fancy so far about it, but it was the first time this month, which makes it kind of special: On the first a new law come into effect in Lower Saxony (and some other parts of Germany) prohibiting smoking in public restaurants (save in closed, separate rooms). Being a non-smoker it was a nice experience to see how the former smoking area had vanished from the restaurant. Especially, since in that special case you couldn't avoid the smoking zone: To get to the toilette you needed to go through the smoking zone. And where do you bring your tablet back? Right, in the smoking zone. Nice.

17 June 2007

Meike Reichle: What I learned during my thesis ...

Right, so as announced I finished my thesis this week. Its translated title is (if anyone want to know)

"Design and Implementation of a Model for the Retrieval of Free/Libre Open Source Software using a Case-Based Reasoning System".

Writing it certainly was an educational experience but I am still happy it's done now. Especially the last weeks where rather unfunny, more so since about ten days before my deadline we had a massive heat wave here in Lower Saxony. Now that it's done I am still waiting for enthusiam to kick in. So far weariness still prevails. Maybe also because finishing my thesis does not yet end my studies. We also have to do written and oral examinations which will take place in July and after. So at the moment I spend my days mostly sleeping and trying to muster up enough wanderlust for my trip to DebConf7. (At the moment the prospect of traveling long distance with trains and cheap flights and then be surrounded by a few hundred happy people is still rather daunting.) Anyway, in order to give an impression of my last weeks and months and to sum this all up, a list of random notes, taken during the last weeks, of what I learned while writing my thesis:

23 April 2007

MJ Ray: The Tragedy of Targets (Reader Comments)

Scott Lamb commented:

"Measuring police on the absence of crime is even easier to game, with horrible consequences."
In more detail, Baruch wrote:
"The result of measuring absence of crime will be that reports of crime will be rejected if the cops will think that they won't be able to catch the criminals. You will have to seperate the group that takes the reports and the group that handles them to make it work and even then I'm not sure someone won't find a way to go around that with another trick."
Well, if you read any cycling online forum, you'll have seen some reports of police rejecting reports of 'too hard' crimes like harassing cyclists. I think I've had one report accepted in the last year, about a moped user riding along a cycle track near a playground where I had noted the number plate, and two pretty certainly discarded. So, police discarding or discouraging reports of no-obvious-solution crimes seems to be happening already. andy r wrote:
"Hi there, Don't talk to me about tragedy of targets... As a teacher the word 'target' fills me with both fear and laughter. Last year my year 6 class and I worked our butts off and achieved the highest set of grades for any school in North Somerset, thereby rescuing the school from a very sticky situation with Ofsted. Within days of these results being known the senior LEA advisor suggested to me that the targets had, perhaps, in hindsight been too low. My reply was curt and Anglo-Saxon. Hindsight! Looking out of her hind? The LEA love targets. If you hit them you have not pushed the kids enough. If you exceed them you should have pitched them higher. Woe betide anyone who fails to meet their targets (I will this year, different cohort and those % from last year have been INCREASED!)... My kids have targets (though they have so many that they actually fail to remember them all). Teachers have targets for the numbers of children who are 'supposed' to achieve certain grades but the idiots who set them frequently have only a rudimentary grasp of mathematics. In my current school there are 45 children in a year group, so each one represents a little over 2%. In schools with small classes (perhaps 10 per year in some rural schools) 1 child can equate to 10%. If he's sick on exam day or is just not bright enough, that's 10% gone. And with the government expecting 75-80% of children to achieve a level 4 in their KS2 SATS, it's all too easy to drop blow your 'targets' through illness alone. But here's an even worse tragedy of targets in primary schools... a couple of years ago I had to disapply 2 children from SATS, simply because they have profound special needs and could not take the tests. In addition, the school had an Autistim Unit (now called something PC, but I forget what) which that year had 4 children in year 6. Therefore we had 6 children who could not take the exams. We filled in the paper work but were horrified when the results came in to discover that these children (who all had official exemption on disability grounds) were counted as having taken the test, even though they couldn't. For 'statistical' purposes these kids were classified as having scored zero! Out of a cohort of 36 children, 6 were classified as not having done a thing! The department of education acknowledged that this didn't help our statistics, but stated that it was their policy. In a school with a lot of very deprived kids this 16% scoring zero, added to a significant quanitity of under-achievers was enough to push us down to the bottom 100 primary schools nationally. You can only imagine how damaging that was for the school's reputation - parents took kids out, we were slated in the local press and had to fight like mad to justify our continued existence... Targets... bah! Hey, talking of which. The Health Trust has recently done a survey of local primary school children's weights and heights. In our day this sort of thing was compulsory. Not any more. Parents had to 'opt in' to the survey... And guess what? The parents of the largest kids refused to take part - as did the ignorant b*strds, but that's another story. So the WAHT will now be collating a totally skewed data set. I'm just waiting for the press release highlighting our slim North Somerset children... And of course, someone will be complemented on achieving targets for reducing childhood obesity, whilst infact the problem has probably - as it were- grown. I used to like the way that 'on time targets' were displayed in Didcot railway station. There was a board in foyer which highilighed punctuality. The impressive looking bar chart had these words written on it: "% of trains on time, compared to last month." And the brightly coloured chart was always up around 95%, ish. I was always suprised that nobody commented on that. 0.95*0.95*0.95...... month on month those trains were getting less and less punctual! But nobody bothered to point this out because 95% looks impressive! On many occasions I took the time to read, and re-read, the wording of those graphs so I know with 100% confidence that this was what they quoted. We never had a month with more than 100% punctuality compared to the previous month. Shame. That's enough. I'm off to the dog house."

30 January 2007

Meike Reichle: They're at it again

(Almost all links in this text lead to German sources. Sorry, but this is a local topic and there aren't any English sources.) Unfortunately, Hildesheim is home to some rather prominent figures of the German neo-nazi scene. One of them has now registered for a protest march through Hildesheim on the 24 February 2007. The reason for this is, that an other neo-nazi event, that had been disguised as a "birthday party", but was in fact a propaganda event featuring talks by "contemporary witnesses" and "an evening of ballads" and was arranged by "National Forces of Hildesheim and the Association of German Women" had been prevented by the Hildesheim police. As a reaction to this, the aforementioned gentleman has now registered for a demonstration with the Hildesheim city council. (In Germany you need to register demonstrations.) Official head of the whole thing is this other gentleman, who has a history of trying to organise nazi demonstrations. He occasionally does so in Leipzig, where he tries to organise such demonstrations about twice a year. Their attendance is dropping though and they are usually met with about ten times as many counter demonstrators and thus have to be ended prematurely, exposing them as the unwanted and ridiculous farces they really are. However, the fact that people still try to register demonstrations such as this one is worrying. And the fact that this one is meant to be in the town I live in makes me pretty angry. Fortunately the demonstration is met with broad opposition. An alliance has been formed, consisting of the German adult education centre of Hildesheim (VHS), the Federation of German Trade Unions (DGB), Verdi, our public services union, Attac, the Antifa, the refugee council of Lower Saxony and the political parties with the Hildesheim Greens as the most active part at the moment. It is good to see, that such neo-nazi endeavours are met with such a broad opposition, and that this opposition does not only originate from the "usual suspects", but from the centre of society. (The VHS for example is usually a non-political organisation, and seeing them engage in such an alliance and even hosting its meetings is pretty cool!) It's not sure yet, whether the demonstration will be approved. It probably will, but with a bunch of extra conditions. If it is approved, it is even more important to meet it with the resistance it deserves! So, if you are living near Hildesheim, watch this space for announcements of the planned counter measures.

24 July 2006

David Pashley: Strict feed parsers are useless

Erich, I'm not entirely sure what you did to break Planet, but using a strict feed parser will just result in you missing a significant number of entries. People sadly don't produce valid feeds and will blame your software rather than their feeds. It doesn't help that a number of validators aren't entirely strict and that RSS doesn't have a very comprehensive spec. RSS is a lot worse than Atom, in part thanks to the Atom validator and very well thought out spec. It's for this reason that I ended up writing Eddie rather than using ROME as it was a DOM parser and just failed to get any information out of a non-wellformed feed. Eddie on the other hand is a SAX-based parser. In a recent comparison, an Eddie based aggregator managed to correctly parse several more entries than a ROME based aggregator one particular day. You also have major aggregators being liberal. Sam Ruby discussed this recently with Bloglines becoming the defacto validator; if bloglines parses it, then it's valid. We had the same problem with HTML with people making sure their pages worked in a browser rather than met the spec. I suspect the problem you had with Planet is that you failed to close a tag, causing the rest of the page to be in bold or be a link etc. This is fairly easily solvable and in fact has been with FeedParser, which is the feed parsing library Planet uses. It has support for using HTMLTidy and similar libraries for fixing unbalanced elements. Eddie uses TagSoup to do a similar thing. As a result I've not noticed any particular entry leaking markup and breaking the page. Parhaps Planet Debian just needs to install one of the markup cleaning libraries. I agree that people should use XML tools where possible. Unfortunately, most blogging tools use text based templating systems, which makes producing non-wellformed XML too easy. To deal with this I pass all my output through an XSLT filter, which means that everything is either well formed or doesn't output at all. Unfortunately I don't think everyone would be capable or willing to use XSLT.

18 July 2006

Erich Schubert: Flow oriented programming?

I've been preparing on my exam on programming and modeling languages. The usual classification of imperative, functional, oop and logic programming is kind of inconsequent, since there are e.g. functional oop languages. To me, oop is more of a software engineering thing, usually applied to imperative programming with a load of syntactic sugar. The usual OOP examples suck. They're so basic that all the OOP and modeling stuff is just a complete waste of time. So I was considering more complex examples, and ended up at common design patterns. A couple of design patterns in OOP seem like workarounds to me; a new language (well, maybe C# has addressed some of these, I don't know) could probably add some more syntactic sugar to ease their use. I hate UML diagrams. To me they just emphasize all the obvious stuff, while they quickly get too complex to be of use for "seeing" the important things. Even UML activity diagrams in my opinion don't properly depict the flow of information/data in the program, which is what I really care about. Activity diagrams basically show you a sequence of methods are being called. But often you'll have a method being called thousands of times, with the actual relevant information being in the parameters passed. And some stuff might be done asynchronously, too. For certain problems (well, not for stuff like e.g. the train door used in OOP examples), it could be much more useful to abstract away from the involved classes - which are often just wrappers for data, "records", "datagrams", tcp packets - and instead model flows of data. Think of drawing conveyor belts transporting data, filtering it, duplicating it, ... The gstreamer framework seems to employ such a model for audio and video processing. You build pipelines by placing e.g. sources and sinks there. But you can interpret dozens of code examples with this model. SAX transform a stream of charaters into a stream of XML nodes. UI mainloops are basically a stream of UI events. Network data obviously is easy to model as a data flow; the "obvious" mapping into "packet objects" however often useless. Even when doing a select on a database, the result has an obvious representation as a data flow (a flow of records in this case). You probably only need a couple of "primitives". Sources and sinks, obviously. Filters, Y and Tee modules. Queues and Caches could be interesting, too. Note that data flows can work in two ways: push and pull. Maybe sometimes the same code could be used for pull and push operations, too. When push and pull driven flows meet you often need threads to connect. For example, a SAX parser usually will pull character data from a stream and push a stream of XML nodes as output. One way to get a pull-able output stream out of this (I'm ignoring e.g. the existing XMLpull API for this example) is to use a cache (which will eventuall contain the whole document as Nodes), another is to use two threads and just block the SAX thread until the other pulling thread has requested another node. Of course you can do all this in existing languages (you know, this doesn't give you anything new beyond turing completeness) - just like you could do OOP in assembler. You can, but it would be nice if the compilers offer you an easier syntax. Also it would be nice if I wouldn't have to write different code for pull-driven and push-driven operation. Also note that push type operation is rather typical for imperative programming languages - for i in range(0,10): print i - whereas pull type operations are typical for "lazy" functional languages - take 3 (repeat 'a').

1 June 2006

David Pashley: Tidying Up

A few hours ago I got stressed about the lack of leg room under my desk and ended up spending the next few tidying and moving all of my computers to under the next desk. I also made the mistake of starting to remove keys from my keyboard to clean something sticky and found myself surrounded by keys and a keyless keyboard. It's now nice and shiny, which is more than can be said for the rest of the flat, which is now overrun with all the crap that was around my desk. Another thing that could do with a tidy up is Eddie, my Java liberal feed parsing library. After the initial coding sprint, I've had time to sit back and look at the design of the library and clean up any thing that sticks out. As mentioned in a previous entry, one of the things that has bothered me is that when ever you need to call an object method, you need to be certain that the object is not null. The means you end up with code like:
if (string != null && strong.equals("string"))  
This quickly becomes tiresome and the test for null distracts from the meaning of the code. Fortunately I was reminded of an improvement for string objects. Ideally, we should all be writing comparison conditionals like rvalue == lvalue. (an rvalue mostly is an expresion you can't assign to). The most common rvalue is a literal value like a string constant. The advantage of getting into the habit of writing code like this is that you'll discover at compile time when you accidentally write = rather than ==. Because you can't assign to an rvalue, the compiler will complain. What makes this interesting from a java string point of view is that you can call methods on string literals. Comparing a variable to a string literal, rather than calling .equals() on a variable is that the string literal is not going to be null, so you can remove the test for null and simplify the code:
if("string".equals(string))  
I know it's not everyone's cup of tea, but I prefer it to testing for null every time I look at a string. The other thing is that I've been reading Hardcore Java by Robert Simmons at work. Considering I've only got a few pages in so far. I've received a surprisingly large number of ideas to improve my code. The one that sticks in my head is using assert for doing post and pre conditions on your functions. Using asserts have number of advantages over throwing exceptions, including the fact they get optimised away when you do a production release. In Eddie, during a <feed> element I determine the version of Atom that we are parsing. This had a number of nested if/else if/else blocks. At the end of the function, I wanted to make sure I had set the version string to something, so had the following code:
if (!this.feed.has("format"))  
   throw new SAXParseException("Failed to detect Atom format", this.locator);
 
However, using assertions I can write this as
assert(this.feed.has("format")) : "Failed to detect Atom format";
I highly recommend the Hardcore java book if you want to improve your java programming. It includes sections on the new features of Java 1.5 and using collections. I've made a couple of other cleanups including going through member variable access specifiers to make sure they are right and making several public methods and variables and making them priavte. I also have a couple of ideas about refactoring some of the code to clean it up. Redesigning and refactoring code is almost more fun than writing it in the first place. You get to be in competition with yourself, challenging yourself to write better code and end up with cleaner code in the process. A couple of things I want to do in the near future is use a profiler and code coverage tools. If anyone has recommendations for either of these tools that integrates nicely with eclipse, I'd love to know.

25 May 2006

Uwe Hermann: OS Install Experiences - Part 2: SUSE Linux


Note: This article is part of my OS Install Experiences series.
Next up: a SUSE 10.1 install. It's been a few years since I touched a SUSE distribution (it was something like SUSE Linux 5.3 or so), a lot has happened since then... Here's a rough sketch of the installation and a few superficial remarks and facts related to security. Install
  1. First, I downloaded a SUSE 10.1 CD image, burned it on a CD, and booted from that.
  2. The installer that showed up is graphical, and you can choose between a normal installation, booting a rescue system, or running a memory test (uses memtest86, I presume).
  3. While the installer runs it merely shows a rotating logo, but you can switch to other consoles (ALT+F1, ALT+F3, ALT+F4) for watching log messages passing by.
  4. You can choose the language used in the installer, later also your timezone and keyboard layout. You can also check the installation medium, which verifies the checksum of the CD, I guess.
  5. Next, you'll be asked to accept a license agreement (yeeaah, whatever).
  6. Your hardware will be automatically detected (worked quite well for me), and after that you can choose between a new install or a system upgrade.
  7. As for the desktop, you can use GNOME, KDE, text-mode (no desktop), or a "minimal graphical system" (it turns out that means fvwm, at least that's what I think).
  8. The graphical partitioning tool feels a bit awkward at first, I needed several tries until I figured out how to make it use the layout I wanted it to. The default file system suggested by the tool is ReiserFS.
  9. There's an explicit option which lets you choose the default run-level for the system (run-level 5 is pre-configured).
  10. The bootloader, GRUB, recognized the other partitions (Debian stable + unstable), added an entry for SUSE Linux, and created a working setup. Nice, although more control over the process (e.g. naming of the boot options) would be nice.
  11. Reboot.
  12. I'm asked to insert CDs 2 and 3, which I don't have (or want), as I only burned CD 1. Clicking "abort" a few times does the trick, and I can continue by choosing a hostname and domain name for the box (hydra + local.domain).
  13. Now I must enter the root password. Very nice: I have the choice between DES, MD5, or Blowfish (SUSE default) for the hashing/encryption of user passwords.
  14. Afterwards, the network is configured (automatically, via DHCP). You can enable a firewall at this point, and enable/disable access to the ssh port explicitly. It's also possible to enable "VNC remote administration" (default: off), or configure a proxy.
  15. Authentication methods for users, available from the installer: local (/etc/passwd), LDAP, NIS, Windows Domain.
  16. When adding a new user, there are some options. Per default, the user is in the groups "users" (no per-user groups, it seems), "dialout" and "video", but that can be configured. Password expiration is disabled. The default shell is bash.
  17. And now... another registration message (in the release notes, actually). May I quote (from my head): The registration procedure transfers zmd's unique device identifier to Novell's registration web service. The information sent may also include OS, version, architecture, and the output of uname and hwinfo, according to that text. More on that later, maybe...
  18. Of course, SUSE Linux comes with SUSE's/Novell's AppArmor enabled by default, but I haven't looked into it, yet.
  19. Now some problems appeared. More hardware discovery took place, it seems, then the screen turned black (with only a non-blinking cursor in the upper left), no reaction to any input -> I performed a hard reboot.
  20. After booting, I'm dropped into fvwm (although I chose GNOME in the installer), the reason probably being the forced reboot. After looking around a bit in the menus and stuff, I wanted to start sax2 (to find out what it does), but the screen turned black again -> another hard reboot. Could it be that I don't have enough RAM for this (256 MB)?
  21. Anyways, at this point I lost interest in playing with the system any further, and gathered the below information for comparison reasons...
Security That's it. Comments, suggestions, flames?

20 May 2006

David Pashley: Choosing Member Functions at Runtime in Java

Have you ever wanted to call a member function in your class, but not known what it will be at compile time? I'm writing a SAX parser and would like a function for every element name. I could write a massive switch statement in the startElement function, but this will quite quickly become unmanagable for a large schema. The alternative is to look to see if a particular member function exists and call it. To do this little bit of magic we need to use Java's introspection API. The first thing to do is to get a Class object for our class. We can do that by calling:
Class klass = this.getClass();
We can then look up the method we are looking for using Class.getMethod, but this function requires an array of types that the method we are looking for takes as parameters, so we get the right version of an overloaded method. We can do this with:
Class[] arguments =   Int.class, String.class, URL.class ;
Method method = klass.getMethod("foo", arguments);
Now we have our method, we can call it using the Method.invoke() call. This takes an object as the first parameter, which we can use this, and an array of Objects for the parameters.
Object[] values =  bar, baz, quux ;
method.invoke(this, values);
But what happens if our class has no member method called foo()? Well, Class.getMethod() will throw a NoSuchMethodException, so we can just throw a try/catch block around the code to deal with unhandled functions. It's worth pointing out that Class.getMethod() also throws SecurityException and Method.invoke() throws IllegalAccessException, IllegalArgumentException and InvocationTargetException, so you'll want to catch Exception too. We can chain some of these calls together and the result for my SAX parser is:
public void startElement(String uri, String localName, String qName, Attributes atts) 
            throws SAXException  
   try  
       Class[] argTypes =   String.class, String.class, String.class,
               Attributes.class  ;
       Object[] values =   uri, localName, qName, atts  ;
       this.getClass().getMethod("startElement_" + localName, argTypes)
               .invoke(this, values);
     catch (NoSuchMethodException e)  
       log.debug("unhandled element " + localName);
     catch (Exception e)  
       e.printStackTrace();
    
 
With this arrangement, when I want to handle a new element in my code I can just make a function like:
public void startElement_foo(String uri, String localName, String qName, Attributes atts)
            throws SAXException  
   ... 
 

23 January 2006

Andreas Rottmann: Yet another logging package

I couldn’t resist the temptation, and started to write yet another Scheme logging library; this has been on my TODO-list for quite some time now, but now it became more urgent, since we need a logging facility for conjure. I hope jao will be pleased to see that my branch of conjure already makes use of the new logging module :-) . Of course, I didn’t in fact start from scratch, but had a look at the various logging libraries available; the Scheme ones being: I also had a look at log4r and the Python logging package; both seem worthy taking as a starting point. What I’ve come up with so far has a pretty similiar model to these systems; you send a log entry that should be logged to a logger, which has zero or more handlers that are responsible for actually doing anything with the log entry, such as writing it to a port. All loggers, besides the root logger have a parent, (also a logger) which log entries are sent to, in addition to being processed by the handlers attached to the logger; the propagation to the parent can also be turned off. The logger hierarchy is established by a hierarchical namespace: The logger with the name '(conjure cc) is a child of the logger named '(conjure). This may all sound overly complicated, but getting started is very straightforward:

;; ,open spells.logging
(define log-info (make-log ‘(test) ‘info))
(configure-logger ‘())
(log-info “hello world!”)

make-log creates a logging procedure. Logging procedures take a single argument to be logged; the argument may be an arbitrary object; it is up to the handlers on how to go about formatting this object. The argument passed to the logging procedure is wrapped in a log entry, which additionally contains the log level. The name of the logger that is to be used is '(test), and 'info is the log level. If the logger '(test) doesn’t already exist, it is created on the fly with no handlers and the root logger as a parent; it can be configured later. This separation of logger creation and configuration is important: In a real application, the logging can be configured from the command line or a configuration file; you don’t want to (hard-)code it into the same module that uses the logger. (configure-logger '()) configures the root logger (which has the empty list as name) with a default configuration. configure-logger also has an optional argument in which you can provide a custom configuration, but I won’t go into this now, since this part of interface is most likely to change. The default configuration amounts to logging everything on (current-output-port). Finally, we log a simple string through the logging procedure log-info. The output looks like this:

(test: [info] hello world!)
Well, enough of this for now; if you got curious you can take peek at the code.

15 January 2006

Edd Dumbill: XTech topic musings

Compiled over the last few weeks, here's a random list of some subjects I'd love to see covered in XTech 2006. There's now only three weeks left of the call for participation -- so it's definitely time get that proposal in! Mail me if you have any questions.
  • OpenDocument vs. Microsoft Office Open XML (am I the only one annoyed by how this format is abbreviated as "Open XML"?)
  • Ruby on Rails 1.0
  • Firefox 1.5, including its many new features for developers. I loved the idea from Tristan Nitot that extensions are a way to keep Firefox successful. There's a lot of potential here. Anybody want to attend a tutorial on making Firefox extensions?
  • W3C Rich Web Clients Activity
  • XSLT 2.0 adoption and implementation--anyone but Saxon?
  • The Web Desktop. I was incredibly interested in this post of Miguel de Icaza's. For a long time I've felt RDF could hold the desktop together, data-wise, but he also proposes that HTTP and web services could do a similar thing. I suspect these are two strands of development that go hand in hand.
  • Design, usability and patterns for AJAX web applications.
  • Open Content Alliance
  • RSS and Atom: despite the release of Atom, RSS continues to grow down its own path. I reckon it's about time to sort out where each are going, and what they're best for.
  • XSL-FO: I use this technology regularly for preparing PDFs with RenderX, and the specification itself is mature. It seems time to take stock of XSL-FO and where it might go in future.
Submit your proposal here: XTech 2006 Call for Participation. XTech will be held 16-19 May 2006, Amsterdam, Netherlands.

Edd Dumbill: XTech topic musings

Compiled over the last few weeks, here's a random list of some subjects I'd love to see covered in XTech 2006. There's now only three weeks left of the call for participation -- so it's definitely time get that proposal in! Mail me if you have any questions.
  • OpenDocument vs. Microsoft Office Open XML (am I the only one annoyed by how this format is abbreviated as "Open XML"?)
  • Ruby on Rails 1.0
  • Firefox 1.5, including its many new features for developers. I loved the idea from Tristan Nitot that extensions are a way to keep Firefox successful. There's a lot of potential here. Anybody want to attend a tutorial on making Firefox extensions?
  • W3C Rich Web Clients Activity
  • XSLT 2.0 adoption and implementation--anyone but Saxon?
  • The Web Desktop. I was incredibly interested in this post of Miguel de Icaza's. For a long time I've felt RDF could hold the desktop together, data-wise, but he also proposes that HTTP and web services could do a similar thing. I suspect these are two strands of development that go hand in hand.
  • Design, usability and patterns for AJAX web applications.
  • Open Content Alliance
  • RSS and Atom: despite the release of Atom, RSS continues to grow down its own path. I reckon it's about time to sort out where each are going, and what they're best for.
  • XSL-FO: I use this technology regularly for preparing PDFs with RenderX, and the specification itself is mature. It seems time to take stock of XSL-FO and where it might go in future.
Submit your proposal here: XTech 2006 Call for Participation. XTech will be held 16-19 May 2006, Amsterdam, Netherlands.

Edd Dumbill: XTech topic musings

Compiled over the last few weeks, here's a random list of some subjects I'd love to see covered in XTech 2006. There's now only three weeks left of the call for participation -- so it's definitely time get that proposal in! Mail me if you have any questions.
  • OpenDocument vs. Microsoft Office Open XML (am I the only one annoyed by how this format is abbreviated as "Open XML"?)
  • Ruby on Rails 1.0
  • Firefox 1.5, including its many new features for developers. I loved the idea from Tristan Nitot that extensions are a way to keep Firefox successful. There's a lot of potential here. Anybody want to attend a tutorial on making Firefox extensions?
  • W3C Rich Web Clients Activity
  • XSLT 2.0 adoption and implementation--anyone but Saxon?
  • The Web Desktop. I was incredibly interested in this post of Miguel de Icaza's. For a long time I've felt RDF could hold the desktop together, data-wise, but he also proposes that HTTP and web services could do a similar thing. I suspect these are two strands of development that go hand in hand.
  • Design, usability and patterns for AJAX web applications.
  • Open Content Alliance
  • RSS and Atom: despite the release of Atom, RSS continues to grow down its own path. I reckon it's about time to sort out where each are going, and what they're best for.
  • XSL-FO: I use this technology regularly for preparing PDFs with RenderX, and the specification itself is mature. It seems time to take stock of XSL-FO and where it might go in future.
Submit your proposal here: XTech 2006 Call for Participation. XTech will be held 16-19 May 2006, Amsterdam, Netherlands.

15 December 2005

Edd Dumbill: XTech topic musings

Compiled over the last few weeks, here's a random list of some subjects I'd love to see covered in XTech 2006. There's now only three weeks left of the call for participation -- so it's definitely time get that proposal in! Mail me if you have any questions. Submit your proposal here: XTech 2006 Call for Participation. XTech will be held 16-19 May 2006, Amsterdam, Netherlands.

14 December 2005

Hanna Wallach: grow little margin, we gonna solve AI

I’ve just returned from NIPS 2005. The conference was great, and I hope to post more later about my favourite papers, posters and talks. The highlight of this year’s conference was undoubtedly Jeff Bilmes, Michael Collins, Koby Crammer and Fernando Pereira’s summary of their workshop on structured learning for text and speech processing. Fortunately, I captured the entire thing on video for the enjoyment of the machine learning community (and anyone else who’s interested). So, without further ado, I present Jeff Bilmes (bass), Michael Collins (sax), Koby Crammer (bongos) and Fernando Pereira (vocals) performing “We Gonna Solve AI”. For those of you that wish to sing along at home, the lyrics are:
Summertime, and the learning is easy. Our problem is structured,
And the accuracy is high. Your funders are rich,
And your colleagues are good-looking. So grow little margin,
We gonna solve AI. Wintertime, and the learning is #-P. Our speech is recognized,
But we don’t know why. Our code is in MATLAB,
And our data’s synthetic. So grow little margin,
We gonna solve AI.
[*] sung “sharpee”

Next.

Previous.